package com.dfs.web3j;

import java.lang.Override;
import java.lang.String;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
import org.web3j.abi.EventEncoder;
import org.web3j.abi.EventValues;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Event;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Int256;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.Log;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import rx.Observable;
import rx.functions.Func1;

/**
 * <p>Auto generated code.<br>
 * <strong>Do not modify!</strong><br>
 * Please use {@link org.web3j.codegen.SolidityFunctionWrapperGenerator} to update.
 *
 * <p>Generated with web3j version 2.0.1.
 */
public final class FileInfoManager extends Contract {
    private static final String BINARY = "60606040526000600155341561001157fe5b5b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60106012819055505b5b617ab5806200006f6000396000f30060606040523615610152576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063180db1b4146101545780631bd951551461017a57806324b508a3146101e8578063276e6472146102c95780632ced7cef1461033b578063310eff5d1461042f578063319af333146105195780633ca6268e146105a65780633d7403a31461061d5780633ffbd47f1461068f57806341304fac1461072c57806341c0e1b51461079a5780634b5c4277146107ac5780635e01eb5a1461085d57806378a9eeed146108f6578063800c7e381461098f57806382b7b500146109b5578063887240d014610a9657806388d97c3014610c40578063893d20e814610cae578063a87d942c14610d47578063b1498e2914610d6d578063b60e72cc14610ddf578063da421df514610e56578063e9e69a4814610f06578063ffcad44e14610f2c575bfe5b341561015c57fe5b610164610f9a565b6040518082815260200191505060405180910390f35b341561018257fe5b6101d2600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610fa5565b6040518082815260200191505060405180910390f35b34156101f057fe5b610240600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061107f565b604051808060200182810382528381815181526020019150805190602001908083836000831461028f575b80518252602083111561028f5760208201915060208101905060208303925061026b565b505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d157fe5b610321600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506114dd565b604051808215151515815260200191505060405180910390f35b341561034357fe5b610419600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061199d565b6040518082815260200191505060405180910390f35b341561043757fe5b610490600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050611a13565b60405180806020018281038252838181518152602001915080519060200190808383600083146104df575b8051825260208311156104df576020820191506020810190506020830392506104bb565b505050905090810190601f16801561050b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561052157fe5b610590600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121de565b6040518082815260200191505060405180910390f35b34156105ae57fe5b610607600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050612265565b6040518082815260200191505060405180910390f35b341561062557fe5b610675600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506122d6565b604051808215151515815260200191505060405180910390f35b341561069757fe5b61072a600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050612938565b005b341561073457fe5b610784600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061293d565b6040518082815260200191505060405180910390f35b34156107a257fe5b6107aa612972565b005b34156107b457fe5b610847600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506129d1565b6040518082815260200191505060405180910390f35b341561086557fe5b61086d612a17565b60405180806020018281038252838181518152602001915080519060200190808383600083146108bc575b8051825260208311156108bc57602082019150602081019050602083039250610898565b505050905090810190601f1680156108e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108fe57fe5b610906612a44565b6040518080602001828103825283818151815260200191508051906020019080838360008314610955575b80518252602083111561095557602082019150602081019050602083039250610931565b505050905090810190601f1680156109815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561099757fe5b61099f612d5c565b6040518082815260200191505060405180910390f35b34156109bd57fe5b610a0d600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050612db0565b6040518080602001828103825283818151815260200191508051906020019080838360008314610a5c575b805182526020831115610a5c57602082019150602081019050602083039250610a38565b505050905090810190601f168015610a885780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610a9e57fe5b610bb7600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061309a565b6040518080602001828103825283818151815260200191508051906020019080838360008314610c06575b805182526020831115610c0657602082019150602081019050602083039250610be2565b505050905090810190601f168015610c325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610c4857fe5b610c98600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506132c7565b6040518082815260200191505060405180910390f35b3415610cb657fe5b610cbe61331c565b6040518080602001828103825283818151815260200191508051906020019080838360008314610d0d575b805182526020831115610d0d57602082019150602081019050602083039250610ce9565b505050905090810190601f168015610d395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610d4f57fe5b610d5761336b565b6040518082815260200191505060405180910390f35b3415610d7557fe5b610dc5600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050613379565b604051808215151515815260200191505060405180910390f35b3415610de757fe5b610e40600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001909190505061395d565b6040518082815260200191505060405180910390f35b3415610e5e57fe5b610e7d60048080359060200190919080359060200190919050506139ca565b6040518080602001828103825283818151815260200191508051906020019080838360008314610ecc575b805182526020831115610ecc57602082019150602081019050602083039250610ea8565b505050905090810190601f168015610ef85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610f0e57fe5b610f16613de7565b6040518082815260200191505060405180910390f35b3415610f3457fe5b610f84600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050613df2565b6040518082815260200191505060405180910390f35b600060015490505b90565b600060006000835191506020821115610fbd57602091505b60009250600090505b60208110156110775781811015611063578381815181101515610fe557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff16610100840201925061106b565b610100830292505b5b806001019050610fc6565b5b5050919050565b6110876177ec565b60006000604060405190810160405280601181526020017f7b22726574223a302c2264617461223a7b000000000000000000000000000000815250925061115c611115604060405190810160405280600581526020017f746f74616c00000000000000000000000000000000000000000000000000000081525060038054905061402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b00000000000000000000000000000000000000000000815250856143a49092919063ffffffff16565b925060009150600090505b60038054905081101561148a576112b084600260038481548110151561118957fe5b906000526020600020900160005b5060405180828054600181600116156101000203166002900480156111f35780601f106111d15761010080835404028352918201916111f3565b820191906000526020600020905b8154815290600101906020018083116111df575b505091505090815260200160405180910390206008018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561129d5780601f106112725761010080835404028352916020019161129d565b820191906000526020600020905b81548152906001019060200180831161128057829003601f168201915b505050505061444490919063ffffffff16565b80156113715750600060018111156112c457fe5b60026003838154811015156112d557fe5b906000526020600020900160005b50604051808280546001816001161561010002031660029004801561133f5780601f1061131d57610100808354040283529182019161133f565b820191906000526020600020905b81548152906001019060200180831161132b575b50509150509081526020016040518091039020600c0160009054906101000a900460ff16600181111561136e57fe5b14155b1561147c5760008211156113cb576113c8604060405190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152508461458890919063ffffffff16565b92505b61147361146460026003848154811015156113e257fe5b906000526020600020900160005b50604051808280546001816001161561010002031660029004801561144c5780601f1061142a57610100808354040283529182019161144c565b820191906000526020600020905b815481529060010190602001808311611438575b505091505090815260200160405180910390206145f3565b8461458890919063ffffffff16565b92506001820191505b5b8080600101915050611167565b6114d3604060405190810160405280600381526020017f5d7d7d00000000000000000000000000000000000000000000000000000000008152508461458890919063ffffffff16565b92505b5050919050565b60006000600060018111156114ee57fe5b6002846040518082805190602001908083835b602083106115245780518252602082019150602081019050602083039250611501565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600c0160009054906101000a900460ff16600181111561157357fe5b1415611647576004600681111561158657fe5b6001819055506115cb604060405190810160405280601681526020017f64656c6574652066696c65206e6f74206578697374730000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260168152602001807f64656c6574652066696c65206e6f7420657869737473000000000000000000008152506020019250505060405180910390a160019150611997565b600460006116559190617800565b600090505b6003805490508110156117ac576117308360038381548110151561167a57fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561171d5780601f106116f25761010080835404028352916020019161171d565b820191906000526020600020905b81548152906001019060200180831161170057829003601f168201915b505050505061444490919063ffffffff16565b1561173a576117a1565b6004805480600101828161174e9190617822565b916000526020600020900160005b60038481548110151561176b57fe5b906000526020600020900160005b509091909150908054600181600116156101000203166002900461179e92919061784e565b50505b80600101905061165a565b600360006117ba9190617800565b600090505b60048054905081101561183e57600380548060010182816117e09190617822565b916000526020600020900160005b6004848154811015156117fd57fe5b906000526020600020900160005b509091909150908054600181600116156101000203166002900461183092919061784e565b50505b8060010190506117bf565b60006002846040518082805190602001908083835b602083106118765780518252602082019150602081019050602083039250611853565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600c0160006101000a81548160ff021916908360018111156118c757fe5b0217905550600060068111156118d957fe5b60018190555061191f604060405190810160405280601981526020017f64656c6574652066696c6520737563636573732c2069643a2000000000000000815250846129d1565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260138152602001807f64656c6574652066696c652073756363657373000000000000000000000000008152506020019250505060405180910390a1600191505b50919050565b60006119a76177ec565b602060405190810160405280600081525090506119cf8585836143a49092919063ffffffff16565b90506119da83610fa5565b600102600019166119ea82610fa5565b60010260405180826000191660001916815260200191505060405180910390a15b509392505050565b611a1b6177ec565b6000600060006000600060006000611a328a613df2565b965060009550600060125488811515611a4757fe5b061415611a635760125487811515611a5b57fe5b049550611a77565b600160125488811515611a7257fe5b040195505b6000891080611a8857506001860389115b15611b22577f46696c65496e666f4d616e61676572000000000000000000000000000000000060405180807f62616420706172616d657465727320696e2070616765427947726f7570000000815250601d01905060405180910390a1604060405190810160405280601f81526020017f7b22726574223a302c2264617461223a7b22746f74616c223a302c5b5d7d7d0081525097506121d1565b604060405190810160405280601181526020017f7b22726574223a302c2264617461223a7b0000000000000000000000000000008152509750611bee611ba7604060405190810160405280600581526020017f746f74616c0000000000000000000000000000000000000000000000000000008152508961402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b000000000000000000000000000000000000000000008152508a6143a49092919063ffffffff16565b9750886012540294506000935060009250600091505b600380549050821015611e395760006001811115611c1e57fe5b6002600384815481101515611c2f57fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015611c995780601f10611c77576101008083540402835291820191611c99565b820191906000526020600020905b815481529060010190602001808311611c85575b50509150509081526020016040518091039020600c0160009054906101000a900460ff166001811115611cc857fe5b14158015611e0e5750611e0d8a6002600385815481101515611ce657fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015611d505780601f10611d2e576101008083540402835291820191611d50565b820191906000526020600020905b815481529060010190602001808311611d3c575b505091505090815260200160405180910390206008018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dfa5780601f10611dcf57610100808354040283529160200191611dfa565b820191906000526020600020905b815481529060010190602001808311611ddd57829003601f168201915b505050505061444490919063ffffffff16565b5b15611e1a576001840193505b8484101515611e2b57819250611e39565b5b8180600101925050611c04565b600090508291505b60038054905082108015611e56575060125481105b156121855760006001811115611e6857fe5b6002600384815481101515611e7957fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015611ee35780601f10611ec1576101008083540402835291820191611ee3565b820191906000526020600020905b815481529060010190602001808311611ecf575b50509150509081526020016040518091039020600c0160009054906101000a900460ff166001811115611f1257fe5b1415801561205857506120578a6002600385815481101515611f3057fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015611f9a5780601f10611f78576101008083540402835291820191611f9a565b820191906000526020600020905b815481529060010190602001808311611f86575b505091505090815260200160405180910390206008018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120445780601f1061201957610100808354040283529160200191612044565b820191906000526020600020905b81548152906001019060200180831161202757829003601f168201915b505050505061444490919063ffffffff16565b5b156121775760018101905061210b6120fc600260038581548110151561207a57fe5b906000526020600020900160005b5060405180828054600181600116156101000203166002900480156120e45780601f106120c25761010080835404028352918201916120e4565b820191906000526020600020905b8154815290600101906020018083116120d0575b505091505090815260200160405180910390206145f3565b8961458890919063ffffffff16565b975060125481108015612125575060016003805490500382105b1561217657612173604060405190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152508961458890919063ffffffff16565b97505b5b5b8180600101925050611e41565b6121ce604060405190810160405280600381526020017f5d7d7d00000000000000000000000000000000000000000000000000000000008152508961458890919063ffffffff16565b97505b5050505050505092915050565b60006121e86177ec565b6020604051908101604052806000815250905061222e8461221e8573ffffffffffffffffffffffffffffffffffffffff1661518d565b836143a49092919063ffffffff16565b905061223981610fa5565b60010260405180826000191660001916815260200191505060405180910390a0600091505b5092915050565b600061226f6177ec565b6020604051908101604052806000815250905061229f8461228f8561539b565b836143a49092919063ffffffff16565b90506122aa81610fa5565b60010260405180826000191660001916815260200191505060405180910390a0600091505b5092915050565b60006122e2600561557a565b6122f682600561570a90919063ffffffff16565b15156123ca576001600681111561230957fe5b60018190555061234e604060405190810160405280600d81526020017f6261642066696c65206a736f6e0000000000000000000000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc60015460405180828152602001806020018281038252600d8152602001807f6261642066696c65206a736f6e000000000000000000000000000000000000008152506020019250505060405180910390a160009050612933565b600060018111156123d757fe5b6002600560000160405180828054600181600116156101000203166002900480156124395780601f10612417576101008083540402835291820191612439565b820191906000526020600020905b815481529060010190602001808311612425575b50509150509081526020016040518091039020600c0160009054906101000a900460ff16600181111561246857fe5b141561253c576004600681111561247b57fe5b6001819055506124c0604060405190810160405280601681526020017f7570646174652066696c65206e6f74206578697374730000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260168152602001807f7570646174652066696c65206e6f7420657869737473000000000000000000008152506020019250505060405180910390a160009050612933565b6125fc602060405190810160405280600081525060056001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125e95780601f106125be576101008083540402835291602001916125e9565b820191906000526020600020905b8154815290600101906020018083116125cc57829003601f168201915b505050505061444490919063ffffffff16565b505b60016005600c0160006101000a81548160ff0219169083600181111561262057fe5b02179055506103e8420260056003018190555060056002600560000160405180828054600181600116156101000203166002900480156126975780601f10612675576101008083540402835291820191612697565b820191906000526020600020905b815481529060010190602001808311612683575b50509150509081526020016040518091039020600082018160000190805460018160011615610100020316600290046126d19291906178d5565b50600182018160010190805460018160011615610100020316600290046126f99291906178d5565b50600282018160020190805460018160011615610100020316600290046127219291906178d5565b5060038201548160030155600482015481600401556005820181600501908054600181600116156101000203166002900461275d9291906178d5565b50600682018160060190805460018160011615610100020316600290046127859291906178d5565b50600782018160070190805460018160011615610100020316600290046127ad9291906178d5565b50600882018160080190805460018160011615610100020316600290046127d59291906178d5565b5060098201548160090155600a820181600a0190805460018160011615610100020316600290046128079291906178d5565b50600b820181600b01908054600181600116156101000203166002900461282f9291906178d5565b50600c820160009054906101000a900460ff1681600c0160006101000a81548160ff0219169083600181111561286157fe5b02179055509050506000600681111561287657fe5b6001819055506128bb604060405190810160405280601381526020017f7570646174652066696c6520737563636573730000000000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260138152602001807f7570646174652066696c652073756363657373000000000000000000000000008152506020019250505060405180910390a1600190505b919050565b5b5050565b600061294882610fa5565b60010260405180826000191660001916815260200191505060405180910390a0600090505b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129ce576129cf565b5b565b60006129dc82610fa5565b600102600019166129ec84610fa5565b60010260405180826000191660001916815260200191505060405180910390a1600090505b92915050565b612a1f6177ec565b612a3e3373ffffffffffffffffffffffffffffffffffffffff16615af4565b90505b90565b612a4c6177ec565b60006000604060405190810160405280601181526020017f7b22726574223a302c2264617461223a7b0000000000000000000000000000008152509250612b21612ada604060405190810160405280600581526020017f746f74616c00000000000000000000000000000000000000000000000000000081525060038054905061402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b00000000000000000000000000000000000000000000815250856143a49092919063ffffffff16565b925060009150600090505b600380549050811015612d0b5760006001811115612b4657fe5b6002600383815481101515612b5757fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015612bc15780601f10612b9f576101008083540402835291820191612bc1565b820191906000526020600020905b815481529060010190602001808311612bad575b50509150509081526020016040518091039020600c0160009054906101000a900460ff166001811115612bf057fe5b141515612cfd576000821115612c4c57612c49604060405190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152508461458890919063ffffffff16565b92505b612cf4612ce56002600384815481101515612c6357fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015612ccd5780601f10612cab576101008083540402835291820191612ccd565b820191906000526020600020905b815481529060010190602001808311612cb9575b505091505090815260200160405180910390206145f3565b8461458890919063ffffffff16565b92506001820191505b5b8080600101915050612b2c565b612d54604060405190810160405280600381526020017f5d7d7d00000000000000000000000000000000000000000000000000000000008152508461458890919063ffffffff16565b92505b505090565b60006000601254600380549050811515612d7257fe5b061415612d9357601254600380549050811515612d8b57fe5b049050612dac565b6001601254600380549050811515612da757fe5b040190505b5b90565b612db86177ec565b604060405190810160405280601181526020017f7b22726574223a302c2264617461223a7b000000000000000000000000000000815250905060006001811115612dfe57fe5b6002836040518082805190602001908083835b60208310612e345780518252602082019150602081019050602083039250612e11565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600c0160009054906101000a900460ff166001811115612e8357fe5b141515612fae57612f22612edb604060405190810160405280600581526020017f746f74616c00000000000000000000000000000000000000000000000000000081525060038054905061402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b00000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050612fa7612f986002846040518082805190602001908083835b60208310612f605780518252602082019150602081019050602083039250612f3d565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206145f3565b8261458890919063ffffffff16565b9050613049565b613046612fff604060405190810160405280600581526020017f746f74616c00000000000000000000000000000000000000000000000000000081525060038054905061402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b00000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b90505b613092604060405190810160405280600381526020017f5d7d7d00000000000000000000000000000000000000000000000000000000008152508261458890919063ffffffff16565b90505b919050565b6130a26177ec565b60006000869250613104866130f6604060405190810160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152508661458890919063ffffffff16565b61458890919063ffffffff16565b925061316185613153604060405190810160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152508661458890919063ffffffff16565b61458890919063ffffffff16565b92506103e8420291506131c5846131b7604060405190810160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152508661458890919063ffffffff16565b61458890919063ffffffff16565b925061322a6131d383615d06565b61321c604060405190810160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152508661458890919063ffffffff16565b61458890919063ffffffff16565b9250826040518082805190602001908083835b60208310613260578051825260208201915060208101905060208303925061323d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206001900490506132ba600260406132ab6132a685615e54565b616062565b6162879092919063ffffffff16565b92505b5050949350505050565b600060006132d483613df2565b90506000601254828115156132e557fe5b06141561330157601254818115156132f957fe5b049150613315565b60016012548281151561331057fe5b040191505b5b50919050565b6133246177ec565b613365600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615af4565b90505b90565b600060038054905090505b90565b600061338f82600561570a90919063ffffffff16565b151561346357600160068111156133a257fe5b6001819055506133e7604060405190810160405280600f81526020017f626164206a736f6e2066696c652021000000000000000000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc60015460405180828152602001806020018281038252600d8152602001807f6261642066696c65206a736f6e000000000000000000000000000000000000008152506020019250505060405180910390a160009050613958565b6000600181111561347057fe5b6002600560000160405180828054600181600116156101000203166002900480156134d25780601f106134b05761010080835404028352918201916134d2565b820191906000526020600020905b8154815290600101906020018083116134be575b50509150509081526020016040518091039020600c0160009054906101000a900460ff16600181111561350157fe5b1415156135d6576004600681111561351557fe5b60018190555061355a604060405190810160405280601981526020017f7468652066696c6520616c72656164792065786973747320210000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260178152602001807f7468652066696c6520616c7265616479206578697374730000000000000000008152506020019250505060405180910390a160009050613958565b60016005600c0160006101000a81548160ff021916908360018111156135f857fe5b02179055506103e842026005600301819055506003805480600101828161361f9190617822565b916000526020600020900160005b60056000019091909150908054600181600116156101000203166002900461365692919061784e565b505060056002600560000160405180828054600181600116156101000203166002900480156136bc5780601f1061369a5761010080835404028352918201916136bc565b820191906000526020600020905b8154815290600101906020018083116136a8575b50509150509081526020016040518091039020600082018160000190805460018160011615610100020316600290046136f69291906178d5565b506001820181600101908054600181600116156101000203166002900461371e9291906178d5565b50600282018160020190805460018160011615610100020316600290046137469291906178d5565b506003820154816003015560048201548160040155600582018160050190805460018160011615610100020316600290046137829291906178d5565b50600682018160060190805460018160011615610100020316600290046137aa9291906178d5565b50600782018160070190805460018160011615610100020316600290046137d29291906178d5565b50600882018160080190805460018160011615610100020316600290046137fa9291906178d5565b5060098201548160090155600a820181600a01908054600181600116156101000203166002900461382c9291906178d5565b50600b820181600b0190805460018160011615610100020316600290046138549291906178d5565b50600c820160009054906101000a900460ff1681600c0160006101000a81548160ff0219169083600181111561388657fe5b02179055509050506000600681111561389b57fe5b6001819055506138e0604060405190810160405280601581526020017f696e736572742066696c6520737563636573732021000000000000000000000081525061293d565b507f6f52e1083ea2b4deef2cb48dbb504881c8b27cfedc2d85bc841b9ed1613c54cc6001546040518082815260200180602001828103825260138152602001807f696e736572742066696c652073756363657373000000000000000000000000008152506020019250505060405180910390a1600190505b919050565b60006139676177ec565b602060405190810160405280600081525090506139978461398785615d06565b836143a49092919063ffffffff16565b90506139a281610fa5565b60010260405180826000191660001916815260200191505060405180910390a05b5092915050565b6139d26177ec565b60006000600084860292506001858401039150600380549050831015806139fa575060008211155b15613acc57613a6e606060405190810160405280602781526020017f7b22726574223a302c2264617461223a7b22746f74616c223a302c226974656d81526020017f73223a5b5d7d7d000000000000000000000000000000000000000000000000008152508561458890919063ffffffff16565b93507f46696c65496e666f4d616e61676572000000000000000000000000000000000060405180807f62616420706172616d657465727320696e207061676546696c65730000000000815250601b01905060405180910390a1613dde565b604060405190810160405280601181526020017f7b22726574223a302c2264617461223a7b0000000000000000000000000000008152509350613b9d613b56604060405190810160405280600581526020017f746f74616c00000000000000000000000000000000000000000000000000000081525060038054905061402a90919063ffffffff16565b604060405190810160405280600a81526020017f2c226974656d73223a5b00000000000000000000000000000000000000000000815250866143a49092919063ffffffff16565b935060038054905082101515613bb95760016003805490500391505b8290505b8181111515613d925760006001811115613bd357fe5b6002600383815481101515613be457fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015613c4e5780601f10613c2c576101008083540402835291820191613c4e565b820191906000526020600020905b815481529060010190602001808311613c3a575b50509150509081526020016040518091039020600c0160009054906101000a900460ff166001811115613c7d57fe5b141515613d8457613d2c613d1d6002600384815481101515613c9b57fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015613d055780601f10613ce3576101008083540402835291820191613d05565b820191906000526020600020905b815481529060010190602001808311613cf1575b505091505090815260200160405180910390206145f3565b8561458890919063ffffffff16565b93508181141515613d8357613d80604060405190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152508561458890919063ffffffff16565b93505b5b5b8080600101915050613bbd565b613ddb604060405190810160405280600381526020017f5d7d7d00000000000000000000000000000000000000000000000000000000008152508561458890919063ffffffff16565b93505b50505092915050565b600060125490505b90565b6000600060009150600090505b6003805490508110156140235760006001811115613e1957fe5b6002600383815481101515613e2a57fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015613e945780601f10613e72576101008083540402835291820191613e94565b820191906000526020600020905b815481529060010190602001808311613e80575b50509150509081526020016040518091039020600c0160009054906101000a900460ff166001811115613ec357fe5b141580156140095750614008836002600384815481101515613ee157fe5b906000526020600020900160005b506040518082805460018160011615610100020316600290048015613f4b5780601f10613f29576101008083540402835291820191613f4b565b820191906000526020600020905b815481529060010190602001808311613f37575b505091505090815260200160405180910390206008018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613ff55780601f10613fca57610100808354040283529160200191613ff5565b820191906000526020600020905b815481529060010190602001808311613fd857829003601f168201915b505050505061444490919063ffffffff16565b5b15614015576001820191505b5b8080600101915050613dff565b5b50919050565b6140326177ec565b60006000600060006003865101935060008714156140555760018401935061407f565b8692505b600083111561407e57600a8381151561406e57fe5b0492508380600101945050614059565b5b8360405180591061408d5750595b908082528060200260200182016040525b509450600091507f220000000000000000000000000000000000000000000000000000000000000085838060010194508151811015156140da57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600090505b85518110156141c357858181518110151561412657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002858380600101945081518110151561418557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b808060010191505061410f565b7f220000000000000000000000000000000000000000000000000000000000000085838060010194508151811015156141f857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a00000000000000000000000000000000000000000000000000000000000000858380600101945081518110151561425d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060018403915060008714156143035760307f01000000000000000000000000000000000000000000000000000000000000000285838151811015156142ce57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614399565b5b6000871115614398576030600a8881151561431b57fe5b06017f01000000000000000000000000000000000000000000000000000000000000000285838060019003945081518110151561435457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8781151561439057fe5b049650614304565b5b5b5050505092915050565b6143ac6177ec565b60006000600060006000865188518a5101016040518059106143cb5750595b908082528060200260200182016040525b50955060208901945060208801935060208701925060208601915060009050614409818301868b5161630c565b88518101905061441d818301858a5161630c565b87518101905061443181830184895161630c565b8651810190505b50505050509392505050565b600060008251845114151561445c5760009150614581565b600090505b835181101561457c57828181518110151561447857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811015156144f357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156145705760009150614581565b5b806001019050614461565b600191505b5092915050565b6145906177ec565b60006000600084518651016040518059106145a85750595b908082528060200260200182016040525b5093506020860192506020850191506020840190506145da8184885161630c565b6145e98651820183875161630c565b5b50505092915050565b6145fb6177ec565b604060405190810160405280600181526020017f7b00000000000000000000000000000000000000000000000000000000000000815250905061476361471c604060405190810160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250846000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147095780601f106146de57610100808354040283529160200191614709565b820191906000526020600020905b8154815290600101906020018083116146ec57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b905061489461484d604060405190810160405280600981526020017f636f6e7461696e65720000000000000000000000000000000000000000000000815250846001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561483a5780601f1061480f5761010080835404028352916020019161483a565b820191906000526020600020905b81548152906001019060200180831161481d57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b90506149c561497e604060405190810160405280600881526020017f66696c656e616d65000000000000000000000000000000000000000000000000815250846002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561496b5780601f106149405761010080835404028352916020019161496b565b820191906000526020600020905b81548152906001019060200180831161494e57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614a5e614a17604060405190810160405280600a81526020017f75706461746554696d6500000000000000000000000000000000000000000000815250846003015461402a90919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614af7614ab0604060405190810160405280600481526020017f73697a6500000000000000000000000000000000000000000000000000000000815250846004015461402a90919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614c28614be1604060405190810160405280600981526020017f66696c655f686173680000000000000000000000000000000000000000000000815250846006018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614bce5780601f10614ba357610100808354040283529160200191614bce565b820191906000526020600020905b815481529060010190602001808311614bb157829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614cc1614c7a604060405190810160405280600481526020017f7479706500000000000000000000000000000000000000000000000000000000815250846009015461402a90919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614df2614dab604060405190810160405280600a81526020017f70726976696c696765730000000000000000000000000000000000000000000081525084600a018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614d985780601f10614d6d57610100808354040283529160200191614d98565b820191906000526020600020905b815481529060010190602001808311614d7b57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b9050614f23614edc604060405190810160405280600881526020017f7372635f6e6f6465000000000000000000000000000000000000000000000000815250846007018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614ec95780601f10614e9e57610100808354040283529160200191614ec9565b820191906000526020600020905b815481529060010190602001808311614eac57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b905061505461500d604060405190810160405280600a81526020017f6e6f64655f67726f757000000000000000000000000000000000000000000000815250846008018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614ffa5780601f10614fcf57610100808354040283529160200191614ffa565b820191906000526020600020905b815481529060010190602001808311614fdd57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b905061518561513e604060405190810160405280600481526020017f696e666f0000000000000000000000000000000000000000000000000000000081525084600b018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561512b5780601f106151005761010080835404028352916020019161512b565b820191906000526020600020905b81548152906001019060200180831161510e57829003601f168201915b505050505061635990919063ffffffff16565b604060405190810160405280600181526020017f7d00000000000000000000000000000000000000000000000000000000000000815250836143a49092919063ffffffff16565b90505b919050565b6151956177ec565b60006000602a6040518059106151a85750595b908082528060200260200182016040525b5092507f30000000000000000000000000000000000000000000000000000000000000008360008151811015156151ec57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000083600181518110151561524c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350602991505b60028260ff1610151561539357600f841690506010848115156152a057fe5b049350600a8160ff16101561531b57603081017f010000000000000000000000000000000000000000000000000000000000000002838360ff168151811015156152e657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350615386565b6061600a8203017f010000000000000000000000000000000000000000000000000000000000000002838360ff1681518110151561535557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b5b81600190039150615281565b5b5050919050565b6153a36177ec565b6000600060006000600060008714156153f457604060405190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509550615570565b8694506001935060009250600087121561541b578660000394506000935082806001019350505b8491505b600082111561544457600a8281151561543457fe5b049150828060010193505061541f565b8260ff166040518059106154555750595b908082528060200260200182016040525b5095508315156154d1577f2d000000000000000000000000000000000000000000000000000000000000008660008151811015156154a057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b6001830390505b600085111561556f576030600a868115156154ef57fe5b06017f01000000000000000000000000000000000000000000000000000000000000000286828060019003935060ff1681518110151561552b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8581151561556757fe5b0494506154d8565b5b5050505050919050565b60206040519081016040528060008152508160000190805190602001906155a292919061795c565b5060206040519081016040528060008152508160020190805190602001906155cb92919061795c565b5060206040519081016040528060008152508160010190805190602001906155f492919061795c565b5060008160040181905550602060405190810160405280600081525081600601908051906020019061562792919061795c565b50602060405190810160405280600081525081600801908051906020019061565092919061795c565b506000816009018190555060008160030181905550602060405190810160405280600081525081600a01908051906020019061568d92919061795c565b50602060405190810160405280600081525081600b0190805190602001906156b692919061795c565b5060206040519081016040528060008152508160070190805190602001906156df92919061795c565b50600081600c0160006101000a81548160ff0219169083600181111561570157fe5b02179055505b50565b60006157158361557a565b61575e604060405190810160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b83600001908051906020019061577592919061795c565b506157bf604060405190810160405280600881526020017f66696c656e616d65000000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b8360020190805190602001906157d692919061795c565b50615820604060405190810160405280600981526020017f636f6e7461696e65720000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b83600101908051906020019061583792919061795c565b50615881604060405190810160405280600481526020017f73697a650000000000000000000000000000000000000000000000000000000081525083616d2490919063ffffffff16565b83600401819055506158d2604060405190810160405280600981526020017f66696c655f686173680000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b8360060190805190602001906158e992919061795c565b50615933604060405190810160405280600481526020017f747970650000000000000000000000000000000000000000000000000000000081525083616d2490919063ffffffff16565b8360090181905550615984604060405190810160405280600a81526020017f70726976696c6967657300000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b83600a01908051906020019061599b92919061795c565b506159e5604060405190810160405280600481526020017f696e666f00000000000000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b83600b0190805190602001906159fc92919061795c565b50615a46604060405190810160405280600881526020017f7372635f6e6f6465000000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b836007019080519060200190615a5d92919061795c565b50615aa7604060405190810160405280600a81526020017f6e6f64655f67726f757000000000000000000000000000000000000000000000815250836165d490919063ffffffff16565b836008019080519060200190615abe92919061795c565b506000836000018054600181600116156101000203166002900490501415615ae95760009050615aee565b600190505b92915050565b615afc6177ec565b615b046179dc565b60006000600060006028604051805910615b1b5750595b908082528060200260200182016040525b509450600093505b6014841015615cf8578360130360080260020a8773ffffffffffffffffffffffffffffffffffffffff16811515615b6757fe5b047f01000000000000000000000000000000000000000000000000000000000000000292506010837f0100000000000000000000000000000000000000000000000000000000000000900460ff16811515615bbe57fe5b047f0100000000000000000000000000000000000000000000000000000000000000029150817f01000000000000000000000000000000000000000000000000000000000000009004601002837f01000000000000000000000000000000000000000000000000000000000000009004037f0100000000000000000000000000000000000000000000000000000000000000029050615c5c826175cd565b8585600202815181101515615c6d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350615ca6816175cd565b8560018660020201815181101515615cba57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8380600101945050615b34565b8495505b5050505050919050565b615d0e6177ec565b6000600060006000851415615d5b57604060405190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509350615e4c565b600092508491505b6000821115615d8857600a82811515615d7857fe5b0491508280600101935050615d63565b8260ff16604051805910615d995750595b908082528060200260200182016040525b5093506001830390505b6000851115615e4b576030600a86811515615dcb57fe5b06017f01000000000000000000000000000000000000000000000000000000000000000284828060019003935060ff16815181101515615e0757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85811515615e4357fe5b049450615db4565b5b505050919050565b615e5c6177ec565b600060006042604051805910615e6f5750595b908082528060200260200182016040525b5092507f3000000000000000000000000000000000000000000000000000000000000000836000815181101515615eb357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000836001815181101515615f1357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604191505b60028260ff1610151561605a57600f84169050601084811515615f6757fe5b049350600a8160ff161015615fe257603081017f010000000000000000000000000000000000000000000000000000000000000002838360ff16815181101515615fad57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061604d565b6061600a8203017f010000000000000000000000000000000000000000000000000000000000000002838360ff1681518110151561601c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b5b81600190039150615f48565b5b5050919050565b61606a6177ec565b6000600090505b825181101561627d577f410000000000000000000000000000000000000000000000000000000000000083828151811015156160a957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156161be57507f5a00000000000000000000000000000000000000000000000000000000000000838281518110151561614e57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b156162715760207f01000000000000000000000000000000000000000000000000000000000000000283828151811015156161f557fe5b90602001018181517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002179150907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b5b806001019050616071565b8291505b50919050565b61628f6177ec565b60006000848651038411156162a5578486510393505b6000841115156162c75760206040519081016040528060008152509250616303565b836040518059106162d55750595b908082528060200260200182016040525b509250602086019150602083019050616302818684018661630c565b5b50509392505050565b60005b60208210151561633557825184526020840193506020830192505b60208203915061630f565b6001826020036101000a039050801983511681855116818117865250505b50505050565b6163616177ec565b6000600060006000600586518851010160405180591061637e5750595b908082528060200260200182016040525b509450602087019350602086019250602085019150600090507f220000000000000000000000000000000000000000000000000000000000000085828060010193508151811015156163dd57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061641b81830184885161630c565b8551810190507f2200000000000000000000000000000000000000000000000000000000000000858280600101935081518110151561645657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000085828060010193508151811015156164bb57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f2200000000000000000000000000000000000000000000000000000000000000858280600101935081518110151561652057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061655e81830185895161630c565b8651810190507f2200000000000000000000000000000000000000000000000000000000000000858280600101935081518110151561659957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b5050505092915050565b6165dc6177ec565b6000600060006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600094505b600115616b2d576166ac61669b89604060405190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600181526020017f22000000000000000000000000000000000000000000000000000000000000008152506143a49092919063ffffffff16565b868b6176c29092919063ffffffff16565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561679b5761676b61675a89604060405190810160405280600181526020017f2700000000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600181526020017f27000000000000000000000000000000000000000000000000000000000000008152506143a49092919063ffffffff16565b868b6176c29092919063ffffffff16565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561679a57616d18565b5b600288510186019550600093505b8851861015616b0b577f200000000000000000000000000000000000000000000000000000000000000089878151811015156167e157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806168f357507f0900000000000000000000000000000000000000000000000000000000000000898781518110151561688457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061699757507f0d00000000000000000000000000000000000000000000000000000000000000898781518110151561692857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80616a3b57507f0a0000000000000000000000000000000000000000000000000000000000000089878151811015156169cc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15616a4d578580600101965050616b06565b7f3a000000000000000000000000000000000000000000000000000000000000008987815181101515616a7c57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415616b0057858060010196505060019350616b0b565b616b0b565b5b6167a9565b8851861415616b1957616d18565b8315616b2457616b2d565b8594505b616610565b60019250616b7c604060405190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250878b6176c29092919063ffffffff16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415616c255760009250616bf5604060405190810160405280600181526020017f2700000000000000000000000000000000000000000000000000000000000000815250878b6176c29092919063ffffffff16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415616c2457616d18565b5b6001820191508215616c8357616c7c604060405190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250838b6176c29092919063ffffffff16565b9050616cd1565b616cce604060405190810160405280600181526020017f2700000000000000000000000000000000000000000000000000000000000000815250838b6176c29092919063ffffffff16565b90505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415616cfe57616d18565b616d15828383038b6162879092919063ffffffff16565b96505b50505050505092915050565b6000600060006000600060006000600096507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600094505b60011561727b57616dfa616de989604060405190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600181526020017f22000000000000000000000000000000000000000000000000000000000000008152506143a49092919063ffffffff16565b868b6176c29092919063ffffffff16565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415616ee957616eb9616ea889604060405190810160405280600181526020017f2700000000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600181526020017f27000000000000000000000000000000000000000000000000000000000000008152506143a49092919063ffffffff16565b868b6176c29092919063ffffffff16565b95507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415616ee8576175c1565b5b600288510186019550600093505b8851861015617259577f20000000000000000000000000000000000000000000000000000000000000008987815181101515616f2f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061704157507f09000000000000000000000000000000000000000000000000000000000000008987815181101515616fd257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806170e557507f0d00000000000000000000000000000000000000000000000000000000000000898781518110151561707657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061718957507f0a00000000000000000000000000000000000000000000000000000000000000898781518110151561711a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561719b578580600101965050617254565b7f3a0000000000000000000000000000000000000000000000000000000000000089878151811015156171ca57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561724e57858060010196505060019350617259565b617259565b5b616ef7565b8851861415617267576175c1565b83156172725761727b565b8594505b616d5e565b8592505b885183101561737857888381518110151561729657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004915060208260ff16148061731b575060098260ff16145b806173295750600d8260ff16145b806173375750600a8260ff16145b806173455750603a8260ff16145b80617353575060228260ff16145b80617361575060278260ff16145b151561736c57617378565b5b82600101925061727f565b600190507f2b0000000000000000000000000000000000000000000000000000000000000089848151811015156173ab57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561742f576001905082806001019350506174df565b7f2d00000000000000000000000000000000000000000000000000000000000000898481518110151561745e57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156174de576000905082806001019350505b5b5b88518310156175b25788838151811015156174f757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004915060308260ff161015801561757f575060398260ff1611155b151561759857801515617593578660000396505b6175c1565b6030820360ff16600a88020196505b8260010192506174e0565b8015156175c0578660000396505b5b50505050505092915050565b6000600a7f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101561766c576030827f01000000000000000000000000000000000000000000000000000000000000009004017f01000000000000000000000000000000000000000000000000000000000000000290506176bd565b6057827f01000000000000000000000000000000000000000000000000000000000000009004017f01000000000000000000000000000000000000000000000000000000000000000290506176bd565b5b919050565b6000600060006000602087019250602086019150826176e98689510387860189518661772c565b03905086518110156176fd57809350617721565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505b5b5050509392505050565b6000600060006000600088871115156177da5760208711151561778f5760018760200360080260020a031980875116888b038a018a96505b81838851161461778457600187019650806001880310617764578b8b0196505b5050508394506177e0565b8686209150879350600092505b868903831115156177d85786842090508060001916826000191614156177c4578394506177e0565b6001840193505b828060010193505061779c565b5b5b88880194505b50505050949350505050565b602060405190810160405280600081525090565b508054600082559060005260206000209081019061781e91906179f0565b5b50565b8154818355818115116178495781836000526020600020918201910161784891906179f0565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061788757805485556178c4565b828001600101855582156178c457600052602060002091601f016020900482015b828111156178c35782548255916001019190600101906178a8565b5b5090506178d19190617a1c565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061790e578054855561794b565b8280016001018555821561794b57600052602060002091601f016020900482015b8281111561794a57825482559160010191906001019061792f565b5b5090506179589190617a1c565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061799d57805160ff19168380011785556179cb565b828001600101855582156179cb579182015b828111156179ca5782518255916020019190600101906179af565b5b5090506179d89190617a1c565b5090565b602060405190810160405280600081525090565b617a1991905b80821115617a155760008181617a0c9190617a41565b506001016179f6565b5090565b90565b617a3e91905b80821115617a3a576000816000905550600101617a22565b5090565b90565b50805460018160011615610100020316600290046000825580601f10617a675750617a86565b601f016020900490600052602060002090810190617a859190617a1c565b5b505600a165627a7a72305820f54abace1701ba15f6c760a7a6260d485c9bba4737a068d12e837fce14fba4b10029";

    private FileInfoManager(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    private FileInfoManager(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public List<NotifyEventResponse> getNotifyEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Notify", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<EventValues> valueList = extractEventParameters(event,transactionReceipt);
        ArrayList<NotifyEventResponse> responses = new ArrayList<NotifyEventResponse>(valueList.size());
        for(EventValues eventValues : valueList) {
            NotifyEventResponse typedResponse = new NotifyEventResponse();
            typedResponse._errno = (Uint256)eventValues.getNonIndexedValues().get(0);
            typedResponse._info = (Utf8String)eventValues.getNonIndexedValues().get(1);
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<NotifyEventResponse> notifyEventObservable() {
        final Event event = new Event("Notify", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST,DefaultBlockParameterName.LATEST, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, NotifyEventResponse>() {
            @Override
            public NotifyEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                NotifyEventResponse typedResponse = new NotifyEventResponse();
                typedResponse._errno = (Uint256)eventValues.getNonIndexedValues().get(0);
                typedResponse._info = (Utf8String)eventValues.getNonIndexedValues().get(1);
                return typedResponse;
            }
        });
    }

    public Future<Uint256> getErrno() {
        Function function = new Function("getErrno", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> stringToUint(Utf8String _str) {
        Function function = new Function("stringToUint", 
                Arrays.<Type>asList(_str), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> listByGroup(Utf8String _group) {
        Function function = new Function("listByGroup", 
                Arrays.<Type>asList(_group), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> deleteById(Utf8String _fileId) {
        Function function = new Function("deleteById", Arrays.<Type>asList(_fileId), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public Future<Uint256> log(Utf8String _str, Utf8String _str2, Utf8String _topic) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str, _str2, _topic), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> pageByGroup(Utf8String _group, Uint256 _pageNo) {
        Function function = new Function("pageByGroup", 
                Arrays.<Type>asList(_group, _pageNo), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> log(Utf8String _str, Address _addr) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str, _addr), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> log(Utf8String _str, Int256 _i) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str, _i), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> update(Utf8String _fileJson) {
        Function function = new Function("update", Arrays.<Type>asList(_fileJson), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public Future<TransactionReceipt> register(Utf8String _name, Utf8String _version) {
        Function function = new Function("register", Arrays.<Type>asList(_name, _version), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public Future<Uint256> log(Utf8String _str) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> kill() {
        Function function = new Function("kill", Arrays.<Type>asList(), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public Future<Uint256> log(Utf8String _str, Utf8String _topic) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str, _topic), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> getSender() {
        Function function = new Function("getSender", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> listAll() {
        Function function = new Function("listAll", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getCurrentPageCount() {
        Function function = new Function("getCurrentPageCount", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> find(Utf8String _fileId) {
        Function function = new Function("find", 
                Arrays.<Type>asList(_fileId), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> generateFileID(Utf8String _salt, Utf8String _groupID, Utf8String _serverId, Utf8String _filename) {
        Function function = new Function("generateFileID", 
                Arrays.<Type>asList(_salt, _groupID, _serverId, _filename), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getGroupPageCount(Utf8String _group) {
        Function function = new Function("getGroupPageCount", 
                Arrays.<Type>asList(_group), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> getOwner() {
        Function function = new Function("getOwner", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getCount() {
        Function function = new Function("getCount", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> insert(Utf8String _fileJson) {
        Function function = new Function("insert", Arrays.<Type>asList(_fileJson), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public Future<Uint256> log(Utf8String _str, Uint256 _ui) {
        Function function = new Function("log", 
                Arrays.<Type>asList(_str, _ui), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Utf8String> pageFiles(Uint256 _pageNo, Uint256 _pageSize) {
        Function function = new Function("pageFiles", 
                Arrays.<Type>asList(_pageNo, _pageSize), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getCurrentPageSize() {
        Function function = new Function("getCurrentPageSize", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getGroupFileCount(Utf8String _group) {
        Function function = new Function("getGroupFileCount", 
                Arrays.<Type>asList(_group), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public static Future<FileInfoManager> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialValue) {
        return deployAsync(FileInfoManager.class, web3j, credentials, gasPrice, gasLimit, BINARY, "", initialValue);
    }

    public static Future<FileInfoManager> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialValue) {
        return deployAsync(FileInfoManager.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, "", initialValue);
    }

    public static FileInfoManager load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new FileInfoManager(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    public static FileInfoManager load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new FileInfoManager(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static class NotifyEventResponse {
        public Uint256 _errno;

        public Utf8String _info;
    }
}
